<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>Syntaxe JavaScript</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/Syntaxe_JavaScript"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Syntaxe_JavaScript rootpage-Syntaxe_JavaScript skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Syntaxe JavaScript</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr"><p>La <b><a href="Syntaxe" title="Syntaxe">syntaxe</a> <a href="JavaScript" title="JavaScript">JavaScript</a></b> est un ensemble de règles qui définissent ce qui constitue un <a href="Programme_informatique" title="Programme informatique">programme</a> valide en langage JavaScript.
</p>
<div class="mw-heading mw-heading2"><h2 id="Origine">Origine</h2></div>
<p><a href="Brendan_Eich" title="Brendan Eich">Brendan Eich</a> a résumé ainsi le lignage de la <a href="Syntaxe" title="Syntaxe">syntaxe</a> dans le premier paragraphe <a rel="nofollow" class="external text" href="http://hepunx.rl.ac.uk/~adye/jsspec11/intro.htm#1006028">JavaScript 1.1</a> des spécifications :
<span class="citation">« JavaScript emprunte la plupart de sa syntaxe à <a href="Java_(langage)" title="Java (langage)">Java</a>, mais hérite aussi d'<a href="Awk" title="Awk">Awk</a> et <a href="Perl_(langage)" title="Perl (langage)">Perl</a>, avec une influence indirecte de <a href="Self_(langage)" title="Self (langage)">Self</a> pour son système de prototype objet. »</span>
</p>
<div class="mw-heading mw-heading2"><h2 id="Variables">Variables</h2></div>
<p>Les <a href="Variable_(informatique)" title="Variable (informatique)">variables</a> en JavaScript n'ont pas de <a href="Type_(informatique)" title="Type (informatique)">type</a> défini, et n'importe quelle valeur peut être stockée dans n'importe quelle variable. Les variables peuvent être déclarées avec <code>const</code> ou <code>let</code>. La différence entre ces deux mots clés est que les variables déclarées avec <code>const</code> ne peuvent être réaffectés alors qu'avec <code>let</code> si. Ces variables ont une portée au niveau du bloc de code où elles ont été déclarées.
</p><p>Le mot clé <code>var</code> est une vieille syntaxe pour déclarer des variables qui ne doit plus être utilisée.
</p><p>Voici un exemple de déclaration de variables :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">bonjour</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"bonjour"</span><span class="p">;</span>
<span class="nx">bonjour</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"hello"</span><span class="p">;</span><span class="w"> </span><span class="c1">//provoque une erreur</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">nombre</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">5</span><span class="p">;</span>
<span class="nx">nombre</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">2</span><span class="p">;</span><span class="w"> </span><span class="c1">//cela va fonctionner</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="kc">true</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nx">nombre</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">9</span><span class="p">;</span><span class="c1">//nous pouvons accéder à "nombre"</span>
<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">hello</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"hello"</span><span class="p">;</span>
<span class="p">}</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">hello</span><span class="p">)</span><span class="c1">// provoque une erreur car "hello" est une variable propre à la condition ci-dessus</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Types_de_données_de_base"><span id="Types_de_donn.C3.A9es_de_base"></span>Types de données de base</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Nombres">Nombres</h3></div>
<p>Les nombres en JavaScript sont représentés en binaire comme des <a href="IEEE_754" title="IEEE 754">IEEE-754</a> Doubles, ce qui permet une précision de 14 à 15 chiffres significatifs <a rel="nofollow" class="external text" href="http://www.jibbering.com/faq/#FAQ4_2">JavaScript FAQ 4.2</a> <abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr>. Comme ce sont des <a href="Syst%C3%A8me_binaire" title="Système binaire">nombres binaires</a>, ils ne représentent pas toujours exactement les <a href="Nombre_d%C3%A9cimal" title="Nombre décimal">nombres décimaux</a>, en particulier les <a href="Fraction_(math%C3%A9matiques)" title="Fraction (mathématiques)">fractions</a>.
</p><p>Ceci pose problème quand on formate des nombres pour les afficher car JavaScript n'a pas de méthode native pour le faire. Par exemple:
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="nx">alert</span><span class="p">(</span><span class="mf">0.94</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mf">0.01</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche 0.9299999999999999</span>
</pre></div>
<p>En conséquence, l'arrondi devrait être utilisé dès qu'un nombre est <a rel="nofollow" class="external text" href="http://www.jibbering.com/faq/#FAQ4_1">formaté pour l'affichage</a> <abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr>.
La méthode toFixed() ne fait pas partie des spécifications de l'<a href="ECMAScript" title="ECMAScript">ECMAScript</a> et est implémentée différemment selon l'environnement, elle ne peut donc être invoquée.
</p><p>Les nombres peuvent être spécifiés dans l'une de ces notations :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="mf">345</span><span class="p">;</span><span class="w"> </span><span class="c1">// un "entier", bien qu'il n'y ait qu'un seul type numérique en JavaScript</span>
<span class="mf">34.5</span><span class="p">;</span><span class="w"> </span><span class="c1">// un nombre flottant</span>
<span class="mf">3.45e2</span><span class="p">;</span><span class="w"> </span><span class="c1">// un autre nombre flottant, équivalent à 345</span>
<span class="mo">0377</span><span class="p">;</span><span class="w"> </span><span class="c1">// un entier octal égal à 255</span>
<span class="mh">0xFF</span><span class="p">;</span><span class="w"> </span><span class="c1">// un entier hexadecimal égal à 255, les lettres A-F peuvent être en minuscules ou en majuscules</span>
</pre></div>
<p>Dans certaines implémentations de l'ECMAScript comme l'<a href="ActionScript" title="ActionScript">ActionScript</a>, les couleurs sont parfois spécifiées avec des nombres entiers en écriture <a href="Syst%C3%A8me_hexad%C3%A9cimal" title="Système hexadécimal">hexadécimale</a> :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">var</span><span class="w"> </span><span class="nx">colorful</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">Color</span><span class="p">(</span><span class="w"> </span><span class="s1">'_root.shapes'</span><span class="w"> </span><span class="p">);</span>
<span class="nx">colorful</span><span class="p">.</span><span class="nx">setRGB</span><span class="p">(</span><span class="w"> </span><span class="mh">0x003366</span><span class="w"> </span><span class="p">);</span>
</pre></div>
<p>Le constructeur Number peut être utilisé pour réaliser une conversion numérique explicite :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">myString</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"123.456"</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">myNumber</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Number</span><span class="p">(</span><span class="w"> </span><span class="nx">myString</span><span class="w"> </span><span class="p">);</span>
</pre></div>
<p>Quand il est utilisé comme un constructeur, un objet <i>wrapper</i> numérique est créé (toutefois il est peu employé) :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">myNumericWrapper</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nb">Number</span><span class="p">(</span><span class="w"> </span><span class="mf">123.456</span><span class="w"> </span><span class="p">);</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Tableaux">Tableaux</h3></div>
<p>Un <a href="Tableau_(structure_de_donn%C3%A9es)" title="Tableau (structure de données)">tableau</a> est un ensemble d'éléments repérés par leur indice, qui est un <a href="Entier_naturel" title="Entier naturel">nombre entier</a>. En JavaScript, tous les objets peuvent être formés d'un ensemble d'éléments, mais les tableaux sont des objets spéciaux qui disposent de méthodes spécifiques (par exemple, <code>join</code>, <code>slice</code>, et <code>push</code>).
</p><p>Les tableaux ont une propriété <code>length</code> qui représente la longueur du tableau, c'est-à-dire le nombre d'éléments qu'il peut contenir. La propriété length d'un tableau est toujours supérieure à l'indice maximal utilisé dans ce tableau (N.B. Les indices de tableaux sont numérotés à partir de zéro). Si on crée un élément de tableau avec un indice supérieur à <code>length</code>, <code>length</code> est automatiquement augmentée. Inversement, si on diminue la valeur de <code>length</code>, cela supprime automatiquement les éléments qui ont un indice supérieur ou égal. La propriété <code>length</code> est la seule caractéristique qui distingue les tableaux des autres objets.
</p><p>Les éléments de tableau peuvent être accédés avec la notation normale d'accès aux propriétés d'objet :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="nx">monTableau</span><span class="p">[</span><span class="mf">1</span><span class="p">];</span>
<span class="nx">monTableau</span><span class="p">[</span><span class="s2">"1"</span><span class="p">];</span>
</pre></div>
<p>Les 2 notations ci-dessus sont équivalentes.
</p><p>Par contre, il n'est pas possible d'utiliser la notation "point" : objet.propriété, ni d'autres représentations du nombre entier de l'indice :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="nx">monTableau</span><span class="mf">.1</span><span class="p">;</span><span class="w"> </span><span class="c1">// déclenche une erreur de syntaxe</span>
<span class="nx">monTableau</span><span class="p">[</span><span class="s2">"01"</span><span class="p">];</span><span class="w"> </span><span class="c1">// n'est pas identique à monTableau[1]</span>
</pre></div>
<p>La déclaration d'un tableau peut se faire littéralement ou par l'utilisation du constructeur <code>Array</code> :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">let</span><span class="w"> </span><span class="nx">monTableau</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mf">0</span><span class="p">,</span><span class="mf">1</span><span class="p">,,,</span><span class="mf">4</span><span class="p">,</span><span class="mf">5</span><span class="p">];</span><span class="w"> </span><span class="c1">// crée un tableau de longueur 6 avec 4 éléments</span>
<span class="nx">monTableau</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nb">Array</span><span class="p">(</span><span class="mf">0</span><span class="p">,</span><span class="mf">1</span><span class="p">,</span><span class="mf">2</span><span class="p">,</span><span class="mf">3</span><span class="p">,</span><span class="mf">4</span><span class="p">,</span><span class="mf">5</span><span class="p">);</span><span class="w"> </span><span class="c1">// crée un tableau de longueur 6 avec 6 éléments</span>
<span class="nx">monTableau</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nb">Array</span><span class="p">(</span><span class="mf">365</span><span class="p">);</span><span class="w"> </span><span class="c1">// crée un tableau vide de longueur 365</span>
</pre></div>
<p>Les <a href="Tableau_(structure_de_donn%C3%A9es)" title="Tableau (structure de données)">tableaux</a> sont implémentés de façon que seuls les éléments utilisés utilisent de la mémoire ; ce sont des tableaux <i>sporadiques</i>. Si l'on crée un tableau monTableau de longueur 58, puis qu'on attribue <code>monTableau[10] = 'uneValeur'</code> et <code>monTableau[57] = 'uneAutreValeur'</code>, l'espace occupé correspondra seulement à ces 2 éléments, comme pour tous les objets. La propriété <code>length</code> du tableau restera quand même à 58.
</p><p>Grâce à la déclaration littérale, on peut créer des objets similaires aux tableaux associatifs d'autres langages :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">chien</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="nx">couleur</span><span class="o">:</span><span class="s2">"brun"</span><span class="p">,</span><span class="w"> </span><span class="nx">taille</span><span class="o">:</span><span class="s2">"grand"</span><span class="p">};</span>
<span class="nx">chien</span><span class="p">[</span><span class="s2">"couleur"</span><span class="p">];</span><span class="w"> </span><span class="c1">// rend la valeur "brun"</span>
<span class="nx">chien</span><span class="p">.</span><span class="nx">couleur</span><span class="p">;</span><span class="w"> </span><span class="c1">// rend aussi la valeur "brun"</span>
</pre></div>
<p>On peut mélanger les déclarations littérales d'objets et de tableaux pour créer facilement des tableaux associatifs, multidimensionnels, ou les deux à la fois :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">chats</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[{</span><span class="nx">couleur</span><span class="o">:</span><span class="s2">"gris"</span><span class="p">,</span><span class="w"> </span><span class="nx">taille</span><span class="o">:</span><span class="s2">"grand"</span><span class="p">},</span>
<span class="w"> </span><span class="p">{</span><span class="nx">couleur</span><span class="o">:</span><span class="s2">"noir"</span><span class="p">,</span><span class="w"> </span><span class="nx">taille</span><span class="o">:</span><span class="s2">"petit"</span><span class="p">}];</span>
<span class="nx">chats</span><span class="p">[</span><span class="mf">0</span><span class="p">].</span><span class="nx">taille</span><span class="p">;</span><span class="w"> </span><span class="c1">// rend la valeur "grand"</span>
<span class="nx">chiens</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="nx">azor</span><span class="o">:</span><span class="p">{</span><span class="nx">couleur</span><span class="o">:</span><span class="s2">"brun"</span><span class="p">,</span><span class="w"> </span><span class="nx">taille</span><span class="o">:</span><span class="s2">"grand"</span><span class="p">},</span>
<span class="w"> </span><span class="nx">milou</span><span class="o">:</span><span class="p">{</span><span class="nx">couleur</span><span class="o">:</span><span class="s2">"blanc"</span><span class="p">,</span><span class="w"> </span><span class="nx">taille</span><span class="o">:</span><span class="s2">"petit"</span><span class="p">}};</span>
<span class="nx">chiens</span><span class="p">.</span><span class="nx">milou</span><span class="p">.</span><span class="nx">taille</span><span class="p">;</span><span class="w"> </span><span class="c1">// rend la valeur "petit"</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Chaînes_de_caractères"><span id="Cha.C3.AEnes_de_caract.C3.A8res"></span>Chaînes de caractères</h3></div>
<p>En Javascript la <a href="Cha%C3%AEne_de_caract%C3%A8res" title="Chaîne de caractères">chaîne de caractères</a> est considérée comme une suite de caractères. Une chaîne de caractères en JavaScript peut être directement créée en plaçant des caractères entre apostrophes (doubles ou simples) :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">salutation</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"Hello, world!"</span><span class="p">;</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">salutMartien</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'Bonjour, amis terriens'</span><span class="p">;</span>
</pre></div>
<p>Les caractères d'une chaîne peuvent être accédés individuellement (ils sont considérés comme des chaînes d'un seul caractère) avec la même notation que pour les tableaux :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">salutation</span><span class="p">[</span><span class="mf">0</span><span class="p">];</span><span class="w"> </span><span class="c1">// a vaut 'H'</span>
</pre></div>
<p>En JavaScript les chaînes sont immuables :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="nx">salutation</span><span class="p">[</span><span class="mf">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"H"</span><span class="p">;</span><span class="w"> </span><span class="c1">// erreur</span>
</pre></div>
<p>L'opérateur d'égalité == permet de comparer le contenu de deux chaînes de caractères (en tenant compte de la casse), et retourne un booléen :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"world"</span><span class="p">;</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">compare1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="s2">"Hello, "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">x</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"Hello, world"</span><span class="p">);</span><span class="w"> </span><span class="c1">// compare1 vaut true</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">compare2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="s2">"Hello, "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">x</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"hello, world"</span><span class="p">);</span><span class="w"> </span><span class="c1">// compare2 vaut false car les</span>
<span class="w"> </span><span class="c1">// premiers caractères des arguments</span>
<span class="w"> </span><span class="c1">// n'ont pas la même casse</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Opérateurs"><span id="Op.C3.A9rateurs"></span>Opérateurs</h2></div>
<p>L'opérateur '+' est <a href="Surcharge_des_op%C3%A9rateurs" class="mw-redirect" title="Surcharge des opérateurs">surchargé</a> ; il est utilisé pour la concaténation de chaîne de caractères et l'addition ainsi que la conversion de chaînes de caractères en nombres.
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// Concatène 2 chaînes</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'Ceci'</span><span class="p">;</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">' et cela'</span><span class="p">;</span>
<span class="nx">alert</span><span class="p">(</span><span class="nx">a</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">b</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche 'Ceci et cela'</span>
<span class="w"> </span>
<span class="c1">// Additionne deux nombres</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">2</span><span class="p">;</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">6</span><span class="p">;</span>
<span class="nx">alert</span><span class="p">(</span><span class="nx">x</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">y</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche 8</span>
<span class="c1">// Concatène une chaîne et un nombre</span>
<span class="nx">alert</span><span class="p">(</span><span class="w"> </span><span class="nx">x</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s1">'2'</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche '22'</span>
<span class="c1">// Convertit une chaîne en nombre</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">z</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'4'</span><span class="p">;</span><span class="w"> </span><span class="c1">// z est une chaîne (le caractère 4)</span>
<span class="nx">alert</span><span class="p">(</span><span class="w"> </span><span class="nx">z</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">x</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche '42'</span>
<span class="nx">alert</span><span class="p">(</span><span class="w"> </span><span class="o">+</span><span class="nx">z</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">x</span><span class="p">);</span><span class="c1">// affiche 6</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Arithmétiques"><span id="Arithm.C3.A9tiques"></span>Arithmétiques</h3></div>
<p>Opérateurs binaires
</p>
<pre>+ Addition
- Soustraction
* Multiplication
/ Division (retourne une valeur en virgule flottante)
% Modulo (retourne le reste de la division entière)
</pre>
<p>Opérateurs unaires
</p>
<pre>- Négation unaire (inverse le signe)
++ Incrémentation (peut être utilisé en forme préfixée ou postfixée)
-- Décrémentation (peut être utilisé en forme préfixée ou postfixée)
</pre>
<div class="mw-heading mw-heading3"><h3 id="Affectations">Affectations</h3></div>
<pre>= Affectation
+= Ajoute et affecte
-= Soustrait et affecte
*= Multiplie et affecte
/= Divise et affecte
%= Applique le modulo et affecte
</pre>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">let</span><span class="w"> </span><span class="nx">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">1</span><span class="p">;</span>
<span class="nx">x</span><span class="w"> </span><span class="o">*=</span><span class="w"> </span><span class="mf">3</span><span class="p">;</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">x</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche: 3</span>
<span class="nx">x</span><span class="w"> </span><span class="o">/=</span><span class="w"> </span><span class="mf">3</span><span class="p">;</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">x</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche: 1</span>
<span class="nx">x</span><span class="w"> </span><span class="o">-=</span><span class="w"> </span><span class="mf">1</span><span class="p">;</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">x</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche: 0</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Comparaisons">Comparaisons</h3></div>
<pre>== Égal à
!= Différent de
> Supérieur à
>= Supérieur ou égal à
< Inférieur à
<= Inférieur ou égal à
=== Identiques (égaux et du même type)
!== Non-identiques
</pre>
<div class="mw-heading mw-heading3"><h3 id="Booléens"><span id="Bool.C3.A9ens"></span>Booléens</h3></div>
<p>Le langage Javascript possède 3 opérateurs <a href="Bool%C3%A9en" title="Booléen">booléens</a> :
</p>
<pre>&& and (opérateur logique ET)
|| or (opérateur logique OU)
! not (opérateur logique NON)
</pre>
<p>Dans une opération booléenne, toutes les valeurs sont évaluées à <code>true</code> (VRAI), à l'exception de :
</p>
<ul><li>la valeur booléenne <code>false</code> (FAUX) elle-même</li>
<li>le nombre 0</li>
<li>une chaîne de caractères de longueur 0</li>
<li>une des valeurs suivantes : <code>null</code>, <code>undefined</code> ou <code>NaN</code></li></ul>
<p>On peut faire explicitement la conversion d'une valeur quelconque en valeur booléenne par la fonction <code>Boolean</code> :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="nb">Boolean</span><span class="p">(</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span><span class="p">);</span><span class="w"> </span><span class="c1">// rend false (FAUX)</span>
<span class="nb">Boolean</span><span class="p">(</span><span class="w"> </span><span class="mf">0</span><span class="w"> </span><span class="p">);</span><span class="w"> </span><span class="c1">// rend false (FAUX)</span>
<span class="nb">Boolean</span><span class="p">(</span><span class="w"> </span><span class="mf">0.0</span><span class="w"> </span><span class="p">);</span><span class="w"> </span><span class="c1">// rend false (FAUX)</span>
<span class="nb">Boolean</span><span class="p">(</span><span class="w"> </span><span class="s2">""</span><span class="w"> </span><span class="p">);</span><span class="w"> </span><span class="c1">// rend false (FAUX)</span>
<span class="nb">Boolean</span><span class="p">(</span><span class="w"> </span><span class="kc">null</span><span class="w"> </span><span class="p">);</span><span class="w"> </span><span class="c1">// rend false (FAUX)</span>
<span class="nb">Boolean</span><span class="p">(</span><span class="w"> </span><span class="kc">undefined</span><span class="w"> </span><span class="p">);</span><span class="w"> </span><span class="c1">// rend false (FAUX)</span>
<span class="nb">Boolean</span><span class="p">(</span><span class="w"> </span><span class="kc">NaN</span><span class="w"> </span><span class="p">);</span><span class="w"> </span><span class="c1">// rend false (FAUX)</span>
<span class="nb">Boolean</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="s2">"false"</span><span class="w"> </span><span class="p">);</span><span class="w"> </span><span class="c1">// rend true (VRAI)</span>
<span class="nb">Boolean</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="s2">"0"</span><span class="w"> </span><span class="p">);</span><span class="w"> </span><span class="c1">// rend true (VRAI)</span>
</pre></div>
<p>L'opérateur booléen unaire NOT <code>!</code> évalue d'abord la valeur booléenne de son <a href="Op%C3%A9rande" title="Opérande">opérande</a>, puis rend la valeur booléenne opposée :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0</span><span class="p">;</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">9</span><span class="p">;</span>
<span class="o">!</span><span class="nx">a</span><span class="p">;</span><span class="w"> </span><span class="c1">// rend true, car Boolean( a ) rend false</span>
<span class="o">!</span><span class="nx">b</span><span class="p">;</span><span class="w"> </span><span class="c1">// rend false, car Boolean( b ) rend true</span>
</pre></div>
<p>En doublant l'opérateur <code>!</code>, on peut <i>normaliser</i> une valeur booléenne :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">let</span><span class="w"> </span><span class="nx">arg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="nx">arg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">!!</span><span class="nx">arg</span><span class="p">;</span><span class="w"> </span><span class="c1">// arg est désormais à false au lieu de null</span>
<span class="nx">arg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"ChaîneQuelconqueNonVide"</span><span class="p">;</span>
<span class="nx">arg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">!!</span><span class="nx">arg</span><span class="p">;</span><span class="w"> </span><span class="c1">// arg est désormais à true</span>
</pre></div>
<p>Dans les premières implémentations de Javascript et JScript, les opérateurs booléens <code>&&</code> et <code>||</code> fonctionnaient comme leurs homologues dans d'autres langages issus du C, c'est-à-dire qu'ils rendaient toujours une valeur booléenne :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="nx">x</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="nx">y</span><span class="p">;</span><span class="w"> </span><span class="c1">// rend true si x ET y est VRAI, sinon il rend false</span>
<span class="nx">x</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="nx">y</span><span class="p">;</span><span class="w"> </span><span class="c1">// rend true si x OU y est VRAI, sinon il rend false</span>
</pre></div>
<p>Dans les implantations récentes, les opérateurs booléens <code>&&</code> et <code>||</code> rendent un de leurs deux opérandes :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="nx">x</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="nx">y</span><span class="p">;</span><span class="w"> </span><span class="c1">// rend x si x est FAUX, sinon il rend y</span>
<span class="nx">x</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="nx">y</span><span class="p">;</span><span class="w"> </span><span class="c1">// rend x si x est VRAI, sinon il rend y</span>
</pre></div>
<p>Ce fonctionnement provient du fait que l'évaluation s'effectue de gauche à droite. Dès que la réponse est déterminée, l'évaluation s'arrête :
</p>
<ul><li><code>x && y</code> est nécessairement FAUX si <code>x</code> est FAUX, ce n'est pas la peine d'évaluer <code>y</code></li>
<li><code>x || y</code> est nécessairement VRAI si <code>x</code> est VRAI, ce n'est pas la peine d'évaluer <code>y</code></li></ul>
<p>Ce nouveau comportement est peu connu, même parmi les développeurs Javascript expérimentés, et peut causer des problèmes si on s'attend à recevoir une valeur booléenne.
</p>
<div class="mw-heading mw-heading3"><h3 id="Binaires">Binaires</h3></div>
<p>Opérateurs binaires
</p>
<pre>& And : et binaire
| Or : ou binaire
^ Xor : ou binaire exclusif
<< Shift left : décalage à gauche avec remplissage à droite avec 0)
>> Shift right : décalage à droite avec conservation du bit de signe (le bit de gauche, celui du signe, est décalé vers la droite et recopié à son emplacement)
>>> Shift right : décalage à droite sans conservation du bit de signe (avec remplissage à gauche avec 0)
Pour les nombres positifs, >> et >>> donnent le même résultat
</pre>
<p>Opérateur unaire
</p>
<pre>~ Not : inverse tous les bits
</pre>
<p>Affectation
</p>
<pre>&= Et binaire puis affectation
|= Ou binaire puis affectation
^= Ou exclusif binaire puis affectation
<<= Décalage binaire à gauche puis affectation
>>= Décalage binaire à droite avec conservation du bit de signe puis affectation
>>>= Décalage binaire à droite sans conservation du bit de signe puis affectation
</pre>
<div class="mw-heading mw-heading3"><h3 id="Chaînes_de_caractères_2"><span id="Cha.C3.AEnes_de_caract.C3.A8res_2"></span>Chaînes de caractères</h3></div>
<pre>= Assignation
+ Concaténation
+= Concatène et assigne
</pre>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="nx">str</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"ab"</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s2">"cd"</span><span class="p">;</span><span class="w"> </span><span class="c1">// rend "abcd"</span>
<span class="nx">str</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="s2">"e"</span><span class="p">;</span><span class="w"> </span><span class="c1">// rend "abcde"</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Structures_de_contrôle"><span id="Structures_de_contr.C3.B4le"></span>Structures de contrôle</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Si_Sinon">Si Sinon</h3></div>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">expression1</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">//instructions réalisées si expression1 est vraie;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">expression2</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">//instructions réalisées si expression1 est fausse et expression2 est vraie;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">//instructions réalisées dans les autres cas;</span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
<p>Dans chaque structure <i>if..else</i>, la branche <i>else </i> :
</p>
<ul><li>est facultative</li>
<li>peut contenir une autre structure <i>if..else</i></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Opérateur_conditionnel"><span id="Op.C3.A9rateur_conditionnel"></span>Opérateur conditionnel</h3></div>
<p>L'opérateur conditionnel crée une expression qui, en fonction d'une condition donnée, prend la valeur de l'une ou l'autre de 2 expressions données. Son fonctionnement est similaire à celui de la structure <i>si..sinon</i> qui, en fonction d'une condition donnée, exécute l'une ou l'autre de 2 instructions données. En ce sens on peut dire que l'opérateur conditionnel est aux expressions ce que la structure <i>si..sinon</i> est aux instructions.
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">resultat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="nx">condition</span><span class="p">)</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="nx">expression1</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nx">expression2</span><span class="p">;</span>
</pre></div>
<p>Le code ci-dessus, qui utilise l'opérateur conditionnel, a le même effet que le code ci-dessous, qui utilise une structure <i>si..sinon</i> :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">condition</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">resultat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">expression1</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">resultat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">expression2</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
<p>Contrairement à la structure <i>si..sinon</i>, la partie correspondant à la branche <i>sinon</i> est obligatoire.
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">resultat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="nx">condition</span><span class="p">)</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="nx">expression1</span><span class="p">;</span><span class="w"> </span><span class="c1">// incorrect car il manque la valeur à prendre si condition est fausse</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Instruction_switch"><a href="Switch_(instruction)" title="Switch (instruction)">Instruction switch</a></h3></div>
<p>L'instruction switch remplace une série de <i>si..sinon</i> pour tester les nombreuses valeurs que peut prendre une expression :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="k">switch</span><span class="w"> </span><span class="p">(</span><span class="nx">expression</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="nx">UneValeur</span><span class="o">:</span><span class="w"> </span>
<span class="w"> </span><span class="c1">// instructions réalisées si expression=UneValeur;</span>
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="nx">UneAutreValeur</span><span class="o">:</span><span class="w"> </span>
<span class="w"> </span><span class="c1">// instructions réalisées si expression=UneAutreValeur;</span>
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="k">default</span><span class="o">:</span>
<span class="w"> </span><span class="c1">// instructions réalisées dans les autres cas;</span>
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
<ul><li>l'instruction <code>break;</code> termine le bloc <code>case</code> (le <i>cas</i> à traiter). Elle est facultative dans la syntaxe Javascript. Cependant, elle est recommandée, car en son absence l'exécution continuerait dans le bloc <code>case</code> suivant. Dans le dernier bloc <code>case</code> d'un switch l'instruction <code>break;</code> ne sert à rien, sauf à prévoir l'éventualité où on rajouterait plus tard un bloc <code>case</code> supplémentaire.</li>
<li>la valeur du <code>case</code> peut être une chaîne de caractères</li>
<li>les accolades { } sont obligatoires</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Boucle_For">Boucle For</h3></div>
<p>Syntaxe pour plusieurs lignes d'instructions :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="nx">initialisation</span><span class="p">;</span><span class="nx">condition</span><span class="p">;</span><span class="nx">instruction</span><span class="w"> </span><span class="nx">de</span><span class="w"> </span><span class="nx">boucle</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="cm">/*</span>
<span class="cm"> instructions exécutées à chaque passage dans la boucle </span>
<span class="cm"> tant que la condition est vérifiée</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
<p>Syntaxe pour une seule instruction :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="nx">initialisation</span><span class="p">;</span><span class="nx">condition</span><span class="p">;</span><span class="nx">instruction</span><span class="p">)</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Boucle_For..in">Boucle For..in</h3></div>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kd">const</span><span class="w"> </span><span class="nx">Propriete</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="nx">Objet</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">//instructions utilisant Objet[Propriete];</span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
<ul><li>L'itération s'effectue sur toutes les propriétés qui peuvent être associées à un compteur</li>
<li><i>Cette boucle peut aussi être utilisée avec un tableau</i><sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>.</li>
<li>L'ensemble des propriétés balayées dans la boucle diffère selon les navigateurs. Théoriquement, cela dépend d'une propriété interne appelée "DontEnum" définie dans le standard ECMAscript, mais dans la pratique chaque navigateur renvoie un ensemble différent.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Boucle_While">Boucle While</h3></div>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="nx">condition</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nx">instruction</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Boucle_Do..while">Boucle Do..while</h3></div>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="k">do</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nx">instructions</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="nx">condition</span><span class="p">);</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Break,_continue_et_label"><span id="Break.2C_continue_et_label"></span>Break, continue et label</h3></div>
<p><b>break</b> permet de sortir d'une boucle.
</p><p><b>continue</b> permet de passer à l'itération suivante de la boucle.
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">listeFruit</span><span class="o">=</span><span class="p">[</span><span class="s2">"pomme"</span><span class="p">,</span><span class="s2">"poire"</span><span class="p">,</span><span class="s2">"banane"</span><span class="p">,</span><span class="s2">"cerise"</span><span class="p">,</span>
<span class="w"> </span><span class="s2">"framboise"</span><span class="p">,</span><span class="w"> </span><span class="s2">"biscotte"</span><span class="p">,</span><span class="w"> </span><span class="s2">"abricot"</span><span class="p">,</span><span class="w"> </span><span class="s2">"mangue"</span><span class="p">,</span>
<span class="w"> </span><span class="s2">"prune"</span><span class="p">,</span><span class="w"> </span><span class="s2">"olive"</span><span class="p">,</span><span class="w"> </span><span class="s2">"fraise"</span><span class="p">];</span>
<span class="w"> </span><span class="k">for</span><span class="p">(</span><span class="kd">let</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0</span><span class="p">;</span><span class="nx">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="nx">listeFruit</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span><span class="nx">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">fruit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">listeFruit</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span>
<span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="nx">fruit</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"olive"</span><span class="p">){</span>
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="nx">fruit</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"biscotte"</span><span class="p">){</span>
<span class="w"> </span><span class="k">continue</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">fruit</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
<p>Les <b>label</b>s permettent de "briser" (break) ou continuer (continue) plusieurs niveaux de boucles.
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">listeFruit</span><span class="o">=</span><span class="p">[[</span><span class="s2">"pomme"</span><span class="p">,</span><span class="s2">"poire"</span><span class="p">,</span><span class="s2">"banane"</span><span class="p">,</span><span class="s2">"cerise"</span><span class="p">],</span>
<span class="w"> </span><span class="p">[</span><span class="s2">"framboise"</span><span class="p">,</span><span class="w"> </span><span class="s2">"biscotte"</span><span class="p">,</span><span class="w"> </span><span class="s2">"abricot"</span><span class="p">,</span><span class="w"> </span><span class="s2">"mangue"</span><span class="p">],</span>
<span class="w"> </span><span class="p">[</span><span class="s2">"prune"</span><span class="p">,</span><span class="w"> </span><span class="s2">"olive"</span><span class="p">,</span><span class="w"> </span><span class="s2">"fraise"</span><span class="p">],</span>
<span class="w"> </span><span class="p">[</span><span class="s2">"concombre"</span><span class="p">,</span><span class="w"> </span><span class="s2">"cresson"</span><span class="p">,</span><span class="w"> </span><span class="s2">"haricot"</span><span class="p">]];</span>
<span class="w"> </span><span class="nx">listons</span><span class="o">:</span>
<span class="w"> </span><span class="k">for</span><span class="p">(</span><span class="kd">let</span><span class="w"> </span><span class="nx">i</span><span class="o">=</span><span class="mf">0</span><span class="p">;</span><span class="nx">i</span><span class="o"><</span><span class="w"> </span><span class="nx">listeFruit</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span><span class="nx">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">sousliste</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">listeFruit</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span>
<span class="w"> </span><span class="k">for</span><span class="p">(</span><span class="kd">let</span><span class="w"> </span><span class="nx">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0</span><span class="p">;</span><span class="nx">j</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="nx">sousliste</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span><span class="nx">j</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">fruit</span><span class="o">=</span><span class="nx">sousliste</span><span class="p">[</span><span class="nx">j</span><span class="p">];</span>
<span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="nx">fruit</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"olive"</span><span class="p">){</span>
<span class="w"> </span><span class="k">break</span><span class="w"> </span><span class="nx">listons</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="nx">fruit</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"biscotte"</span><span class="p">){</span>
<span class="w"> </span><span class="k">continue</span><span class="w"> </span><span class="nx">listons</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">fruit</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
<p>Les labels permettent aussi de sortir d'un block de code anonyme.
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">fruit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">"pomme"</span><span class="p">,</span><span class="s2">"poire"</span><span class="p">,</span><span class="s2">"banane"</span><span class="p">,</span><span class="s2">"cerise"</span><span class="p">];</span>
<span class="w"> </span><span class="nx">listons</span><span class="o">:</span><span class="w"> </span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">fruit</span><span class="p">[</span><span class="mf">0</span><span class="p">]);</span><span class="w"> </span>
<span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">fruit</span><span class="p">[</span><span class="mf">1</span><span class="p">]);</span><span class="w"> </span>
<span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">fruit</span><span class="p">[</span><span class="mf">2</span><span class="p">]);</span><span class="w"> </span>
<span class="w"> </span><span class="k">break</span><span class="w"> </span><span class="nx">listons</span><span class="p">;</span>
<span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">fruit</span><span class="p">[</span><span class="mf">3</span><span class="p">]);</span><span class="w"> </span>
<span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">fruit</span><span class="p">[</span><span class="mf">4</span><span class="p">]);</span><span class="w"> </span>
<span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">fruit</span><span class="p">[</span><span class="mf">5</span><span class="p">]);</span><span class="w"> </span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Fonctions">Fonctions</h2></div>
<p>Une <a href="Fonction_(informatique)" class="mw-redirect" title="Fonction (informatique)">fonction</a> est un bloc d'instructions avec une liste de paramètres (éventuellement vide). Elle possède généralement un nom et peut renvoyer une valeur.
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">function</span><span class="w"> </span><span class="nx">nom_fonction</span><span class="p">(</span><span class="nx">param1</span><span class="p">,</span><span class="w"> </span><span class="nx">param2</span><span class="p">,</span><span class="w"> </span><span class="nx">param3</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">expression</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">param1</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">param2</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">param3</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">expression</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<p>Syntaxe pour l'appel d'une fonction anonyme, c'est-à-dire sans nom :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">fn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">function</span><span class="p">(</span><span class="nx">arg1</span><span class="p">,</span><span class="w"> </span><span class="nx">arg2</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">//instructions;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">expression</span><span class="p">;</span>
<span class="p">};</span>
</pre></div>
<p>Exemple de fonction : <a href="Algorithme_d'Euclide" title="Algorithme d'Euclide">l'algorithme d'Euclide</a>. Il permet de trouver le plus grand commun diviseur de deux nombres, à l'aide d'une solution géométrique qui soustrait le segment le plus court du plus long<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="kd">function</span><span class="w"> </span><span class="nx">pgcd</span><span class="p">(</span><span class="nx">segmentA</span><span class="p">,</span><span class="w"> </span><span class="nx">segmentB</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="nx">segmentA</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nx">segmentB</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">segmentA</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="nx">segmentB</span><span class="p">)</span>
<span class="w"> </span><span class="nx">segmentA</span><span class="w"> </span><span class="o">-=</span><span class="w"> </span><span class="nx">segmentB</span><span class="p">;</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="nx">segmentB</span><span class="w"> </span><span class="o">-=</span><span class="w"> </span><span class="nx">segmentA</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">segmentA</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">pgcd</span><span class="p">(</span><span class="mf">60</span><span class="p">,</span><span class="w"> </span><span class="mf">40</span><span class="p">);</span><span class="w"> </span><span class="c1">// rend 20</span>
</pre></div>
<ul><li>le nombre des paramètres passés à l'appel de la fonction n'est pas obligatoirement égal au nombre des paramètres nommés dans la définition de la fonction</li>
<li>si un paramètre nommé dans la définition de la fonction n'a pas de paramètre correspondant dans l'appel de la fonction, il reçoit la valeur <code>undefined</code></li>
<li>à l'intérieur de la fonction, les paramètres peuvent être accédés par l'objet <code>arguments</code>. Cet objet donne accès à tous les paramètres en utilisant un indice : <code>arguments[0], arguments[1], ... arguments[n]</code>, y compris ceux qui sont au-delà des paramètres nommés. Attention, <code>arguments</code> n'est <i>pas</i> un tableau. Il a une propriété length mais il n'a pas les méthodes des tableaux comme slice, sort, etc.</li>
<li>tous les paramètres sont passés par valeur, sauf pour les objets les tableaux et les fonctions qui sont passés par référence.</li></ul>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">Objet1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="nx">a</span><span class="o">:</span><span class="mf">1</span><span class="p">}</span>
<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">Objet2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="nx">b</span><span class="o">:</span><span class="mf">2</span><span class="p">}</span>
<span class="w"> </span><span class="kd">function</span><span class="w"> </span><span class="nx">bizarre</span><span class="p">(</span><span class="nx">p</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">p</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">Objet2</span><span class="p">;</span><span class="w"> </span><span class="c1">// on ignore la valeur reçue dans le paramètre p</span>
<span class="w"> </span><span class="nx">p</span><span class="p">.</span><span class="nx">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">arguments</span><span class="p">[</span><span class="mf">1</span><span class="p">]</span><span class="w"> </span><span class="c1">// on remplit Objet2.b avec la valeur du {{2e}} paramètre reçu</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nx">bizarre</span><span class="p">(</span><span class="nx">Objet1</span><span class="p">,</span><span class="w"> </span><span class="mf">3</span><span class="p">)</span><span class="w"> </span><span class="c1">// Objet1 est ignoré, 3 est un paramètre additionnel</span>
<span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="sb">`</span><span class="si">${</span><span class="nx">Objet1</span><span class="p">.</span><span class="nx">a</span><span class="si">}</span><span class="sb"> </span><span class="si">${</span><span class="nx">Objet2</span><span class="p">.</span><span class="nx">b</span><span class="si">}</span><span class="sb">`</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche 1 3</span>
</pre></div>
<p>Il est toutefois possible de transformer l'objet <code>arguments</code> en un tableau grâce à :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Array</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">slice</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">arguments</span><span class="p">);</span>
</pre></div>
<p>On peut déclarer une fonction à l'intérieur d'une autre. La fonction ainsi créée pourra accéder aux variables locales de la fonction dans laquelle elle a été définie. Elle se souviendra de ces variables, même après que l'on sera sorti de la fonction dans laquelle elle a été définie, ce qui constitue une <a href="Fermeture_(informatique)" title="Fermeture (informatique)">fermeture</a>.
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">parfum</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"vanille"</span><span class="p">;</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">glace</span><span class="p">;</span>
<span class="w"> </span><span class="kd">function</span><span class="w"> </span><span class="nx">dessert</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nx">parfum</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"chocolat"</span><span class="p">;</span>
<span class="w"> </span><span class="nx">glace</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">function</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="nb">document</span><span class="p">.</span><span class="nx">write</span><span class="p">(</span><span class="nx">parfum</span><span class="o">+</span><span class="s2">"<br>"</span><span class="p">)};</span>
<span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">parfum</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">parfum</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche vanille</span>
<span class="w"> </span><span class="nx">dessert</span><span class="p">();</span><span class="w"> </span><span class="c1">// affiche "chocolat" parce qu'on est dans dessert</span>
<span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">parfum</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche vanille</span>
<span class="w"> </span><span class="nx">glace</span><span class="p">();</span><span class="w"> </span><span class="c1">// affiche "chocolat" et pas "vanille", même si on est sorti de dessert</span>
<span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">parfum</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche vanille</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Objets">Objets</h2></div>
<p>Par commodité, on sépare habituellement les types de données en <i>primitives</i> (ou types de données de base) et <i>objets</i>. Les objets sont des entités qui ont une identité (ils ne sont égaux qu'à eux-mêmes) et qui associent des noms de propriété à des valeurs. Les propriétés sont appelées <i>slots</i> dans le vocabulaire de la <a href="Programmation_orient%C3%A9e_prototype" title="Programmation orientée prototype">programmation orientée prototype</a>.
</p><p>Le langage Javascript propose divers types d'objets prédéfinis : <a href="Tableau_(structure_de_donn%C3%A9es)" title="Tableau (structure de données)">tableau</a>, <a href="Bool%C3%A9en" title="Booléen">booléen</a>, <a href="Date" title="Date">date</a>, <a href="Fonction_informatique" class="mw-redirect" title="Fonction informatique">fonction</a>, <a href="Maths" class="mw-redirect" title="Maths">maths</a>, <a href="Nombre" title="Nombre">nombre</a>, <a href="Objet_(informatique)" title="Objet (informatique)">objet</a>, <a href="Expression_r%C3%A9guli%C3%A8re" title="Expression régulière">expression régulière</a> et <a href="Cha%C3%AEne_de_caract%C3%A8res" title="Chaîne de caractères">chaîne de caractères</a>. D'autres objets prédéfinis sont des objets <i>hôte</i> issus de l'environnement d'exécution. Par exemple dans un navigateur les objets hôtes appartiennent au modèle <a href="Document_Object_Model" title="Document Object Model">DOM</a> : <a href="Fen%C3%AAtre" title="Fenêtre">fenêtre</a>, <a href="Document" title="Document">document</a>, <a href="Hyperlien" title="Hyperlien">lien hypertexte</a>, etc.
</p><p>On peut voir les objets les plus simples comme des <a href="Tableau_associatif" title="Tableau associatif">dictionnaires</a>. En tant que dictionnaires, ils contiennent des couples clé-valeur, où la clé est une chaîne de caractères et la valeur peut être de n'importe quel type. Les objets simples sont souvent implémentés comme des dictionnaires. Cependant, les objets possèdent des fonctionnalités que n'ont pas les dictionnaires, comme une chaîne prototype.
</p><p>Exemple de déclaration littérale d'un objet contenant des valeurs :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">monObjet</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="nx">nom</span><span class="o">:</span><span class="w"> </span><span class="s1">'vistemboir'</span><span class="p">,</span><span class="w"> </span><span class="nx">utilite</span><span class="o">:</span><span class="w"> </span><span class="s1">'cet objet ne sert à rien'</span><span class="p">,</span><span class="w"> </span><span class="nx">prix</span><span class="o">:</span><span class="w"> </span><span class="mf">5000</span><span class="p">};</span>
</pre></div>
<p>Les propriétés des objets peuvent être créées, lues et écrites, soit avec la notation "point" objet.propriété, soit avec la syntaxe utilisée pour les éléments de tableau :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">etiquette</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monObjet</span><span class="p">.</span><span class="nx">nom</span><span class="p">;</span><span class="w"> </span><span class="c1">// etiquette contient désormais 'vistemboir'</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">vente</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monObjet</span><span class="p">.</span><span class="nx">prix</span><span class="p">;</span><span class="w"> </span><span class="c1">// vente contient désormais 5000</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Création"><span id="Cr.C3.A9ation"></span>Création</h3></div>
<p>Les objets peuvent être créés à l'aide d'un constructeur ou de façon littérale. Le constructeur peut utiliser la fonction prédéfinie Object ou une fonction sur mesure. Par convention les noms des fonctions constructeurs commencent par une majuscule.
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// création à l'aide du constructeur prédéfini :</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">premierObjet</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nb">Object</span><span class="p">();</span>
<span class="c1">// création littérale :</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">objetA</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{};</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">monObjet</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="nx">nom</span><span class="o">:</span><span class="w"> </span><span class="s1">'vistemboir'</span><span class="p">,</span><span class="w"> </span><span class="nx">utilite</span><span class="o">:</span><span class="w"> </span><span class="s1">'cet objet ne sert à rien'</span><span class="p">,</span><span class="w"> </span><span class="nx">prix</span><span class="o">:</span><span class="w"> </span><span class="mf">5000</span><span class="p">};</span>
</pre></div>
<p>Les déclarations littérales d'objets et de tableaux permettent de créer facilement des structures de données adaptées aux besoins :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">maStructure</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nx">nom</span><span class="o">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nx">prenom</span><span class="o">:</span><span class="w"> </span><span class="s2">"Sylvain"</span><span class="p">,</span>
<span class="w"> </span><span class="nx">patronyme</span><span class="o">:</span><span class="w"> </span><span class="s2">"Etiré"</span>
<span class="w"> </span><span class="p">},</span>
<span class="w"> </span><span class="nx">age</span><span class="o">:</span><span class="w"> </span><span class="mf">33</span><span class="p">,</span>
<span class="w"> </span><span class="nx">distractions</span><span class="o">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="s2">"oenologie"</span><span class="p">,</span><span class="w"> </span><span class="s2">"beuveries"</span><span class="w"> </span><span class="p">]</span>
<span class="p">};</span>
</pre></div>
<p>C'est la base de <a href="JSON" class="mw-redirect" title="JSON">JSON</a>, un format d'échanges de données utilisant une syntaxe inspirée des objets Javascript.
</p>
<div class="mw-heading mw-heading3"><h3 id="Constructeur">Constructeur</h3></div>
<p>Les <a href="Constructeur_(programmation_informatique)" class="mw-redirect" title="Constructeur (programmation informatique)">constructeurs</a> assignent simplement des valeurs aux slots de l'objet nouvellement créé. Les valeurs assignées peuvent être elles-mêmes d'autres fonctions.
</p><p>Contrairement à ce qui se passe dans d'autres langages à objets, en Javascript les objets n'ont pas de type. Le constructeur qui sert à créer l'objet n'est pas mémorisé. C'est simplement une fonction qui remplit les slots et le prototype du nouvel objet. Donc le constructeur ne correspond pas à la notion de <a href="Classe_(informatique)" title="Classe (informatique)">classe</a> qu'on trouve dans d'autres langages.
</p><p>Les fonctions sont elles-mêmes des objets, ce qui peut servir à obtenir le même fonctionnement que les "static properties" des langages C++ et Java (cf exemple ci-dessous).
</p><p>Les fonctions ont une propriété spécifique appelée <code>prototype</code> (cf paragraphe Héritage ci-dessous).
</p><p>La destruction d'objet est rarement pratiquée car elle est peu nécessaire. En effet le <a href="Ramasse-miettes_(informatique)" title="Ramasse-miettes (informatique)">ramasse-miettes</a> détruit automatiquement les objets qui ne sont plus référencés.
</p><p>Exemple : manipulation d'objet
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">function</span><span class="w"> </span><span class="nx">MonObjet</span><span class="p">(</span><span class="nx">attributA</span><span class="p">,</span><span class="w"> </span><span class="nx">attributB</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">attributA</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">attributA</span><span class="p">;</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">attributB</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">attributB</span><span class="p">;</span>
<span class="p">}</span>
<span class="nx">MonObjet</span><span class="p">.</span><span class="nx">statiqueC</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"bleu"</span><span class="p">;</span><span class="w"> </span><span class="c1">// ajoute à la fonction une propriété statique avec une valeur</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">MonObjet</span><span class="p">.</span><span class="nx">statiqueC</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche 'bleu'</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">objet</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">MonObjet</span><span class="p">(</span><span class="s1">'rouge'</span><span class="p">,</span><span class="w"> </span><span class="mf">1000</span><span class="p">);</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">objet</span><span class="p">.</span><span class="nx">attributA</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche 'rouge'</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">objet</span><span class="p">.</span><span class="nx">attributB</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche 1000</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">objet</span><span class="p">.</span><span class="nx">statiqueC</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche 'undefined'</span>
<span class="nx">objet</span><span class="p">.</span><span class="nx">attributC</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nb">Date</span><span class="p">();</span><span class="w"> </span><span class="c1">// ajoute à l'objet une nouvelle propriété avec une valeur</span>
<span class="ow">delete</span><span class="w"> </span><span class="nx">objet</span><span class="p">.</span><span class="nx">attributB</span><span class="p">;</span><span class="w"> </span><span class="c1">// enlève une propriété à l'objet</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">objet</span><span class="p">.</span><span class="nx">attributB</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche 'undefined'</span>
<span class="ow">delete</span><span class="w"> </span><span class="nx">objet</span><span class="p">;</span><span class="w"> </span><span class="c1">// supprime l'objet entier (rarement utilisé)</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">objet</span><span class="p">.</span><span class="nx">attributA</span><span class="p">);</span><span class="w"> </span><span class="c1">// déclenche une exception</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Méthodes"><span id="M.C3.A9thodes"></span>Méthodes</h3></div>
<p>Une <a href="M%C3%A9thode_(informatique)" title="Méthode (informatique)">méthode</a> est simplement une fonction qui est assignée à la valeur d'un slot d'objet. Contrairement à ce qui se passe dans de nombreux langages à objets, dans Javascript il n'y a pas de distinction entre la définition d'une fonction et la définition d'une méthode. La différence peut apparaître lors de l'appel de la fonction : une fonction peut être appelée comme une méthode.
</p><p>Dans l'exemple ci-dessous, la fonction Gloup assigne simplement des valeurs aux slots. Certaines de ces valeurs sont des fonctions. De cette façon Gloup peut assigner des fonctions différentes au même slot de différentes instances du même objet. N.B. Il n'y a pas de prototypage dans cet exemple.
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">function</span><span class="w"> </span><span class="nx">y2</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="k">return</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">xxx</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s2">"2 "</span><span class="p">;}</span>
<span class="w"> </span>
<span class="kd">function</span><span class="w"> </span><span class="nx">Gloup</span><span class="p">(</span><span class="nx">xz</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">xxx</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"yyy-"</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">xz</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mf">0</span><span class="p">)</span><span class="w"> </span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">xx</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">function</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="k">return</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">xxx</span><span class="w"> </span><span class="o">+</span><span class="s2">"X "</span><span class="p">;};</span>
<span class="w"> </span><span class="k">else</span><span class="w"> </span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">xx</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">function</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="k">return</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">xxx</span><span class="w"> </span><span class="o">+</span><span class="s2">"Z "</span><span class="p">;};</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">yy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">y2</span><span class="p">;</span>
<span class="p">}</span>
<span class="w"> </span>
<span class="kd">const</span><span class="w"> </span><span class="nx">gloup_un</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">Gloup</span><span class="p">(</span><span class="mf">1</span><span class="p">);</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">gloup_zero</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">Gloup</span><span class="p">(</span><span class="mf">0</span><span class="p">);</span>
<span class="nx">gloup_zero</span><span class="p">.</span><span class="nx">xxx</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"aaa-"</span><span class="p">;</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">gloup_un</span><span class="p">.</span><span class="nx">xx</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">gloup_zero</span><span class="p">.</span><span class="nx">xx</span><span class="p">());</span><span class="w"> </span><span class="c1">// affiche yyy-X aaa-Z</span>
<span class="nx">gloup_un</span><span class="p">.</span><span class="nx">y3</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">y2</span><span class="p">;</span><span class="w"> </span><span class="c1">// assigne à y3 la fonction y2 elle-même et non pas son résultat y2()</span>
<span class="w"> </span>
<span class="kd">const</span><span class="w"> </span><span class="nx">bloub</span><span class="o">=</span><span class="p">{</span><span class="s2">"xxx"</span><span class="o">:</span><span class="w"> </span><span class="s2">"zzz-"</span><span class="p">}</span><span class="w"> </span><span class="c1">// création d'un objet sans utilisation de constructeur</span>
<span class="nx">bloub</span><span class="p">.</span><span class="nx">y4</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">y2</span><span class="w"> </span><span class="c1">// assigne à y4 la fonction y2 elle-même et non pas son résultat y2()</span>
<span class="w"> </span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">gloup_un</span><span class="p">.</span><span class="nx">yy</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">gloup_un</span><span class="p">.</span><span class="nx">y3</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">bloub</span><span class="p">.</span><span class="nx">y4</span><span class="p">());</span><span class="w"> </span><span class="c1">// affiche yyy-2 yyy-2 zzz-2</span>
<span class="w"> </span>
<span class="nx">gloup_un</span><span class="p">.</span><span class="nx">y2</span><span class="p">();</span><span class="w"> </span><span class="c1">// déclenche une exception car gloup_un.y2 n'existe pas</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Héritage"><span id="H.C3.A9ritage"></span><a href="H%C3%A9ritage_(informatique)" title="Héritage (informatique)">Héritage</a></h3></div>
<p>Javascript supporte les hiérarchies d'héritage par prototypage de la même façon que le langage <a href="Self_(langage)" title="Self (langage)">self</a>. Chaque objet contient un slot implicite appelé prototype.
</p><p>Dans l'exemple ci-dessous, la classe Bagnole hérite de la classe Vehicule. Quand on crée l'instance b de la classe Bagnole, une référence à l'instance de base de la classe Vehicule est copiée dans b. La classe Bagnole ne contient pas de valeur pour la fonction roule. <i>Quand la fonction roule est appelée</i> cette fonction est recherchée dans l'arborescence d'héritage et elle est trouvée dans la classe Vehicule. Cela se voit clairement dans l'exemple : si on change la valeur de vehicule.roule, on retrouve cette valeur dans b.roule.
</p><p>Les implémentations de Javascript basées sur Mozilla permettent d'accéder explicitement au prototype d'un objet grâce à un slot appelé _proto_ comme dans l'exemple ci-dessous.
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">function</span><span class="w"> </span><span class="nx">Vehicule</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">roues</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">function</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="nx">println</span><span class="p">(</span><span class="s2">"nombre pair de roues"</span><span class="p">);};</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">roule</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">function</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="nx">println</span><span class="p">(</span><span class="s2">"ça roule"</span><span class="p">);};</span>
<span class="p">}</span>
<span class="kd">function</span><span class="w"> </span><span class="nx">Bagnole</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">roues</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">function</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="nx">println</span><span class="p">(</span><span class="s2">"quatre roues"</span><span class="p">);};</span>
<span class="c1">// redéfinition de la fonction roues pour la classe Bagnole</span>
<span class="p">}</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">vehicule</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">Vehicule</span><span class="p">();</span>
<span class="nx">Bagnole</span><span class="p">.</span><span class="nx">prototype</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">vehicule</span><span class="p">;</span><span class="w"> </span><span class="c1">// doit être exécuté avant d'instancier Bagnole</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">Bagnole</span><span class="p">();</span><span class="w"> </span><span class="c1">// crée b ce qui copie vehicule dans le slot prototype de b</span>
<span class="nx">vehicule</span><span class="p">.</span><span class="nx">roule</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">function</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="nx">println</span><span class="p">(</span><span class="s2">"ça roule sur terrain plat"</span><span class="p">)}</span>
<span class="c1">// redéfinition de la fonction roule pour l'objet vehicule</span>
<span class="nx">b</span><span class="p">.</span><span class="nx">roues</span><span class="p">();</span><span class="w"> </span><span class="c1">// imprime quatre roues</span>
<span class="nx">b</span><span class="p">.</span><span class="nx">roule</span><span class="p">();</span><span class="w"> </span><span class="c1">// imprime ça roule sur terrain plat</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">b</span><span class="p">.</span><span class="nx">roule</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nx">Bagnole</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">roule</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche true</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">b</span><span class="p">.</span><span class="nx">__proto__</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nx">vehicule</span><span class="p">);</span><span class="w"> </span><span class="c1">// affiche true seulement avec Mozilla</span>
</pre></div>
<p>L'exemple suivant montre clairement que les références aux prototypes sont copiées lors de la création de l'instance et que les changements appliqués au prototype se répercutent dans toutes les instances qui s'y réfèrent.
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">function</span><span class="w"> </span><span class="nx">m1</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="k">return</span><span class="w"> </span><span class="s2">"un "</span><span class="p">;}</span>
<span class="kd">function</span><span class="w"> </span><span class="nx">m2</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="k">return</span><span class="w"> </span><span class="s2">"deux "</span><span class="p">;}</span>
<span class="kd">function</span><span class="w"> </span><span class="nx">m3</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="k">return</span><span class="w"> </span><span class="s2">"trois "</span><span class="p">;}</span>
<span class="kd">function</span><span class="w"> </span><span class="nx">Base</span><span class="p">()</span><span class="w"> </span><span class="p">{}</span>
<span class="nx">Base</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">m2</span><span class="p">;</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">alpha</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">Base</span><span class="p">();</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">alpha</span><span class="p">.</span><span class="nx">y</span><span class="p">());</span><span class="w"> </span><span class="c1">// affiche deux </span>
<span class="kd">function</span><span class="w"> </span><span class="nx">Special</span><span class="p">(){</span><span class="k">this</span><span class="p">.</span><span class="nx">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">m3</span><span class="p">}</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">special</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">Special</span><span class="p">();</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">beta</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">Base</span><span class="p">();</span>
<span class="nx">Base</span><span class="p">.</span><span class="nx">prototype</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">special</span><span class="p">;</span><span class="w"> </span><span class="c1">// n'a pas d'effet sur alpha et beta qui sont déjà créés</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">beta</span><span class="p">.</span><span class="nx">y</span><span class="p">());</span><span class="w"> </span><span class="c1">// affiche deux </span>
<span class="kd">const</span><span class="w"> </span><span class="nx">gamma</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">Base</span><span class="p">();</span><span class="w"> </span><span class="c1">// gamma est créé avec special dans son slot prototype</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">gamma</span><span class="p">.</span><span class="nx">y</span><span class="p">());</span><span class="w"> </span><span class="c1">// affiche trois </span>
<span class="nx">special</span><span class="p">.</span><span class="nx">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">m1</span><span class="p">;</span><span class="w"> </span><span class="c1">// impacte gamma et ses éventuelles classes dérivées</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">gamma</span><span class="p">.</span><span class="nx">y</span><span class="p">());</span><span class="w"> </span><span class="c1">// affiche un</span>
</pre></div>
<p>En pratique de nombreuses variations d'héritage sont utilisées, ce qui peut être très puissant mais aussi prêter à confusion.
</p>
<div class="mw-heading mw-heading2"><h2 id="Exceptions">Exceptions</h2></div>
<p>À partir de <a href="Internet_Explorer" title="Internet Explorer">Internet Explorer</a> 5 et <a href="Netscape" class="mw-redirect" title="Netscape">Netscape</a> 6, les implémentations de Javascript comportent une instruction <code>try ... catch ... finally</code> pour la <a href="Syst%C3%A8me_de_gestion_d'exceptions" title="Système de gestion d'exceptions">gestion des exceptions</a>, c'est-à-dire les erreurs en cours d'exécution. Cette instruction traite les exceptions provoquées par une erreur ou par une instruction de levée d'exception.
</p><p>La syntaxe est la suivante :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// instructions pouvant déclencher une exception</span>
<span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="p">(</span><span class="nx">erreur</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// instructions à exécuter en cas d'exception</span>
<span class="p">}</span><span class="w"> </span><span class="k">finally</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// instructions à exécuter dans tous les cas</span>
<span class="p">}</span>
</pre></div>
<p>D'abord, les instructions du bloc <code>try</code> s'exécutent.
</p>
<ul><li>si pendant l'exécution du bloc <code>try</code> une exception est déclenchée, l'exécution passe au bloc <code>catch</code> et le code de l'exception est passé dans le paramètre. À la fin du bloc <code>catch</code>, l'exécution continue dans le bloc <code>finally</code></li>
<li>si aucune exception ne se déclenche, le bloc <code>catch</code> est ignoré et l'exécution passe au bloc <code>finally</code></li></ul>
<p>Le bloc <code>finally</code> sert souvent à libérer la mémoire, pour éviter qu'elle ne reste bloquée lors d'une erreur fatale, même si ce souci ne se pose guère dans Javascript.
</p><p>Exemple :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">tablo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nb">Array</span><span class="p">();</span><span class="w"> </span><span class="c1">// création d'un tableau</span>
<span class="w"> </span><span class="nx">fonctionRisquee</span><span class="p">(</span><span class="nx">tablo</span><span class="p">);</span><span class="w"> </span><span class="c1">// appel d'une fonction qui peut ne pas fonctionner</span>
<span class="p">}</span>
<span class="k">catch</span><span class="w"> </span><span class="p">(...)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nx">logError</span><span class="p">();</span><span class="w"> </span><span class="c1">// traitement des erreurs éventuelles</span>
<span class="p">}</span>
<span class="k">finally</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="ow">delete</span><span class="w"> </span><span class="nx">tablo</span><span class="p">;</span><span class="w"> </span><span class="c1">// libération de la mémoire occupée par tablo même en cas d'erreur fatale</span>
<span class="p">}</span>
</pre></div>
<p>Le bloc <code>finally</code> est facultatif :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// instructions</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="nx">erreur</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// instructions</span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
<p>Le bloc <code>catch</code> est lui aussi facultatif. Dans ce cas, si une exception se déclenche, l'exécution quitte le bloc <code>try</code> et passe au bloc <code>finally</code> sans que l'erreur soit traitée.
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// instructions</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">finally</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// instructions</span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
<p>Attention : il est obligatoire d'avoir au moins l'un des deux blocs <code>catch</code> ou <code>finally</code>, ils ne peuvent pas être absents tous les deux.
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">instruction</span><span class="p">;</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="c1">// erreur</span>
</pre></div>
<p>Si vous utilisez le bloc <code>catch</code>, le paramètre est obligatoire, même si vous ne l'utilisez pas dans le bloc.
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">instruction</span><span class="p">;</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">instruction</span><span class="p">;</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="c1">// erreur</span>
</pre></div>
<p>Sous Mozilla il est permis d'avoir plusieurs instructions <code>catch</code>. Il s'agit d'une extension au standard ECMAScript. Dans ce cas, la syntaxe est similaire à celle de <a href="Java_(langage)" title="Java (langage)">Java</a> :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="k">try</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">instruction</span><span class="p">;</span><span class="w"> </span><span class="p">}</span>
<span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="nx">e</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">e</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"InvalidNameException"</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">instruction</span><span class="p">;</span><span class="w"> </span><span class="p">}</span>
<span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="nx">e</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">e</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"InvalidIdException"</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">instruction</span><span class="p">;</span><span class="w"> </span><span class="p">}</span>
<span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="nx">e</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">e</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"InvalidEmailException"</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">instruction</span><span class="p">;</span><span class="w"> </span><span class="p">}</span>
<span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="nx">e</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">instruction</span><span class="p">;</span><span class="w"> </span><span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Divers">Divers</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Casse">Casse</h3></div>
<p>Javascript est sensible à la casse.
</p><p>L'usage est de donner aux objets un nom qui commence par une majuscule et de donner aux fonctions ou variables un nom qui commence par une minuscule.
</p>
<div class="mw-heading mw-heading3"><h3 id="Espaces_vides_et_points-virgules">Espaces vides et points-virgules</h3></div>
<p>Dans le langage Javascript les instructions se terminent par un point-virgule.
</p><p>Cependant Javascript comporte un mécanisme d'insertion automatique de point-virgule : lors de l'analyse d'une <a href="Ligne_de_code" title="Ligne de code">ligne de code</a> qui ne se termine pas par un point-virgule, si le contenu de la ligne correspond à une instruction correcte, la ligne peut être traitée comme si elle se terminait par un point-virgule.
</p><p>Les caractères <a href="Barre_d'espace" title="Barre d'espace">espace</a>, <a href="Touche_tabulation" class="mw-redirect" title="Touche tabulation">tabulation</a>, <a href="Fin_de_ligne" title="Fin de ligne">fin de ligne</a> et leurs variantes, quand ils ne sont pas inclus dans une chaîne de caractères, sont désignés sous le terme général <i>whitespace</i>. Les caractères whitespace peuvent avoir un effet sur le code à cause du mécanisme d'insertion automatique de point-virgule.
</p><p>Pour éviter les effets non désirés dus au mécanisme d'insertion automatique de point-virgule, il est conseillé d'ajouter systématiquement un point-virgule à la fin de chaque instruction, même si cela diminue la lisibilité du code.
</p><p>Exemple d'effet non désiré :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="k">return</span>
<span class="nx">a</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">b</span><span class="p">;</span>
<span class="c1">// ces 2 lignes renvoient undefined car elles sont traitées comme :</span>
<span class="c1">// return;</span>
<span class="c1">// a + b;</span>
</pre></div>
<p>Autre exemple :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="nx">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">b</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">c</span>
<span class="p">(</span><span class="nx">d</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">e</span><span class="p">).</span><span class="nx">fonc</span><span class="p">()</span>
<span class="c1">// pas de point-virgule ajouté, les lignes sont traitées comme :</span>
<span class="c1">// a = b + c(d + e).fonc()</span>
</pre></div>
<p>D'autre part, les caractères whitespace accroissent inutilement la taille du programme et donc du fichier .js. La solution la plus simple à ce problème est de faire comprimer les fichiers par le serveur, ce qui réduira la taille de tous les fichiers source téléchargés sur le serveur. La compression en zip fonctionne mieux que les logiciels spécialisés en suppression de whitespace (<i>whitespace parser</i>).
</p>
<div class="mw-heading mw-heading3"><h3 id="Commentaires">Commentaires</h3></div>
<p>La syntaxe des <a href="Commentaire_(informatique)" title="Commentaire (informatique)">commentaires</a> est la même qu'en <a href="C%2B%2B" title="C++">C++</a>.
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// commentaire</span>
<span class="cm">/* commentaire</span>
<span class="cm"> multiligne */</span>
</pre></div>
<p>Il est interdit d'imbriquer les commentaires :
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="cm">/* cette syntaxe</span>
<span class="cm"> /* est interdite */</span>
<span class="o">*</span><span class="err">/</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Notes_et_références"><span id="Notes_et_r.C3.A9f.C3.A9rences"></span>Notes et références</h2></div>
<ul><li><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé <span class="">« <a class="external text" href="https://en.wikipedia.org/wiki/JavaScript_syntax?oldid=270458948">JavaScript_syntax</a> » <small>(<a class="external text" href="https://en.wikipedia.org/wiki/JavaScript_syntax?action=history">voir la liste des auteurs</a>)</small></span>.</li></ul>
<div class="references-small decimal" style=""><div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a> </span><span class="reference-text">La question est de savoir si l'itération se fera non seulement sur l'indice du tableau, mais aussi sur d'autres propriétés :
<ul><li><a rel="nofollow" class="external text" href="http://msdn.microsoft.com/en-us/library/kw1tezhk(VS.85).aspx">Un article du site Microsoft Developer Network</a> assure que la boucle <code>For...In</code> peut être utilisée pour itérer sur tous les éléments d'un tableau. L'article du MSDN se réfère à JScript, qui est utilisé par Internet Explorer pour les scripts en JavaScript.</li>
<li><a rel="nofollow" class="external text" href="http://www.w3schools.com/js/js_loop_for_in.asp">Le site W3Schools</a> donne les tableaux comme exemple d'utilisation de la boucle <code>For...In</code>.</li>
<li><a rel="nofollow" class="external text" href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Object_Manipulation_Statements#for...in_Statement">Un article du Mozilla Developer Centre</a> explique le problème : il est tentant d'utiliser la boucle <code>For...In</code> pour balayer les éléments d'un tableau, mais il faut savoir qu'elle balaie aussi les propriétés définies par l'utilisateur. Si vous modifiez l'objet <code>Array</code> en y ajoutant des propriétés ou des méthodes, la boucle <code>For...In</code> rendra le nom de vos propriétés en plus des indices numériques. De ce fait, pour boucler dans un tableau, il vaut mieux utiliser une boucle <code>For</code> classique avec un compteur numérique.</li></ul>
</span></li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a> </span><span class="reference-text">Les exemples présentés dans cet article utilisent souvent une fonction appelée <code>println</code>. Ce terme représente la fonction de <a href="Flux_standard#Sortie_standard" title="Flux standard">sortie standard</a> qui n'existe pas dans la <a href="Biblioth%C3%A8que_standard" title="Bibliothèque standard">bibliothèque standard</a> de Javascript. Dans un navigateur, ce terme peut être remplacé par <code>document.write</code>.</span>
</li>
</ol></div>
</div>
<div class="mw-heading mw-heading3"><h3 id="Bibliographie">Bibliographie</h3></div>
<ul><li>David Flanagan, Paula Ferguson: <i>JavaScript: The Definitive Guide</i>, O'Reilly & Associates, <small style="line-height:1em;">(<a href="International_Standard_Book_Number" title="International Standard Book Number">ISBN</a> <span class="nowrap">0-596-10199-6</span>)</small></li>
<li>Danny Goodman, Brendan Eich: <i>JavaScript Bible</i>, Wiley, John & Sons, <small style="line-height:1em;">(<a href="International_Standard_Book_Number" title="International Standard Book Number">ISBN</a> <span class="nowrap">0-7645-3342-8</span>)</small></li>
<li>Thomas A. Powell, Fritz Schneider: <i>JavaScript: The Complete Reference</i>, McGraw-Hill Companies, <small style="line-height:1em;">(<a href="International_Standard_Book_Number" title="International Standard Book Number">ISBN</a> <span class="nowrap">0-07-219127-9</span>)</small></li>
<li>Emily Vander Veer: <i>JavaScript For Dummies, <abbr class="abbr" title="Fourth" lang="en">4th</abbr> Edition</i>, Wiley, <small style="line-height:1em;">(<a href="International_Standard_Book_Number" title="International Standard Book Number">ISBN</a> <span class="nowrap">0-7645-7659-3</span>)</small></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Voir_aussi">Voir aussi</h2></div>
<style data-mw-deduplicate="TemplateStyles:r194021218">
/* start https://fr.wikipedia.org/ */
.mw-parser-output .autres-projets>.titre{text-align:center;margin:0.2em 0}.mw-parser-output .autres-projets>ul{margin:0;padding:0}.mw-parser-output .autres-projets>ul>li{list-style:none;margin:0.2em 0;text-indent:0;padding-left:24px;min-height:20px;text-align:left;display:block}.mw-parser-output .autres-projets>ul>li>a{font-style:italic}@media(max-width:720px){.mw-parser-output .autres-projets{float:none}}
/* end https://fr.wikipedia.org/ */
</style>
<div class="mw-heading mw-heading3"><h3 id="Articles_connexes">Articles connexes</h3></div>
<ul><li><a href="JavaScript" title="JavaScript">JavaScript</a></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Liens_externes">Liens externes</h3></div>
<dl><dt>Reference material</dt></dl>
<ul><li>Core References for JavaScript versions <a rel="nofollow" class="external text" href="https://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference">1.5</a>
<ul><li><span class="noarchive">« <a rel="nofollow" class="external text" href="https://web.archive.org/web/20080512023823/http://research.nihonsoft.org/javascript/CoreReferenceJS14/index.html">1.4</a> »</span> <small>(version du <time class="nowrap" datetime="2008-05-12" data-sort-value="2008-05-12">12 mai 2008</time> sur <i><a href="Internet_Archive" title="Internet Archive">Internet Archive</a></i>)</small></li>
<li><span class="noarchive">« <a rel="nofollow" class="external text" href="https://web.archive.org/web/20080511125239/http://research.nihonsoft.org:80/javascript/ClientReferenceJS13/index.html">1.3</a> »</span> <small>(version du <time class="nowrap" datetime="2008-05-11" data-sort-value="2008-05-11">11 mai 2008</time> sur <i><a href="Internet_Archive" title="Internet Archive">Internet Archive</a></i>)</small></li>
<li><span class="noarchive">« <a rel="nofollow" class="external text" href="https://web.archive.org/web/20080510151644/http://research.nihonsoft.org:80/javascript/jsref/index.htm">1.2</a> »</span> <small>(version du <time class="nowrap" datetime="2008-05-10" data-sort-value="2008-05-10">10 mai 2008</time> sur <i><a href="Internet_Archive" title="Internet Archive">Internet Archive</a></i>)</small></li></ul></li></ul>
<dl><dt>Ressources</dt></dl>
<ul><li><a rel="nofollow" class="external text" href="https://developer.mozilla.org/en/docs/JavaScript">Mozilla JavaScript Language Documentation</a></li>
<li><a rel="nofollow" class="external text" href="https://developer.mozilla.org/en/docs/A_re-introduction_to_JavaScript">A re-introduction to JavaScript - Mozilla Developer Center</a></li></ul>
<div class="navbox-container" style="clear:both;">
</div>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de la programmation informatique</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2025-08-24" href="https://fr.wikipedia.org/wiki/?title=Syntaxe_JavaScript&oldid=228388170">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>